Visual Theme
th <- theme(axis.title = element_text(family = "Montserrat-Italic", color = "#000000", size = 11),
axis.text = element_text(family = "Montserrat", color = "#000000", size = 9),
panel.background = element_rect(fill = "#f2f2f2"),
panel.grid.major = element_line (color = "#FFFFFF", size = 0.5),
panel.grid.minor = element_line (color = "#FFFFFF", size = 0.1),
plot.title = element_text(family = "Montserrat", color = "#000000", size = 16),
plot.subtitle = element_text(family = "Montserrat", color = "#000000", size = 12),
plot.caption = element_text(family = "Montserrat", color = "#000000", size = 10),
legend.text = element_text(family = "Montserrat", color = "#000000", size = 10),
legend.title = element_text(family = "Montserrat", color = "#000000", size = 11),
strip.text = element_text(family = "Montserrat", color = "#000000", size = 10))
map_th <- theme(axis.title = element_text(family = "Montserrat-Italic", color = "#000000", size = 11),
axis.text = element_text(family = "Montserrat", color = "#000000", size = 9),
panel.background = element_rect(fill = "#484848"),
panel.grid.major = element_line (color = "#FFFFFF", size = 0.5),
panel.grid.minor = element_line (color = "#FFFFFF", size = 0.1),
plot.title = element_text(family = "Montserrat", color = "#000000", size = 16),
plot.subtitle = element_text(family = "Montserrat", color = "#000000", size = 12),
plot.caption = element_text(family = "Montserrat", color = "#000000", size = 10),
legend.text = element_text(family = "Montserrat", color = "#000000", size = 10),
legend.title = element_text(family = "Montserrat", color = "#000000", size = 11),
strip.text = element_text(family = "Montserrat", color = "#000000", size = 10))
Main Categorical Colors
Colors are drawn from the Sustainable Development Goals given their prominance in the development space and the direct reference to the Goals in the discussion of development priorities in the graphs.
Blue: #2699D0 Green: #4CA145 Orange: #F69D30 Pink: #E31480 Red: #C42231 Gray: #6a6a6a
NA color: Dark Gray: #424242
Blue Scale - 6: c(“#125169”, “#206b8c”, “#2699D0”, “#5aa1c8”, “#7fbdde”, “#a9d9ef”) Blue Scale - 3 c(“#125169”, “#2699D0”, “#a9d9ef”)
Orange Scale - 6: c(“#b83d05”, “#c95714”, “#F69D30”, “#e78938”, “#f3a352”, “#fabe7a”) Orange Scale - 3 c(“#b83d05”, “#F89E37”, “#fabe7a”)
Diverging 6-point scale: c(“#125169”, “#2699D0”, “#a9d9ef”,“#fabe7a”, “#F89E37”, “#b83d05”)
Plot 2: What countries have a disproportionate share of unsatisfactory projects?
d_split <- data %>%
filter(completion_year > 2000) %>%
select(country_name, continent, satisfactory, unsatisfactory) %>%
group_by_at(c("country_name", "continent")) %>%
summarise(
count_all = n(),
count_satisfactory = sum(satisfactory, na.rm = TRUE),
count_unsatisfactory = sum(unsatisfactory, na.rm = TRUE),
pct_satisfactory = count_satisfactory/count_all,
pct_unsatisfactory = count_unsatisfactory/count_all
) %>%
filter(!is.na(country_name))
top20 <- d_split %>% arrange(desc(pct_unsatisfactory))
top20 <- top20[1:20,]
top20 <- top20 %>%
select(country_name, continent, pct_unsatisfactory) %>%
as.data.frame() %>%
add_row(country_name = 'Global Average', continent = "Global Average", pct_unsatisfactory = mean(d_split$pct_unsatisfactory))
top20$country_name[top20$country_name == "Micronesia (Federated States of)"] <- "Micronesia"
### Most disproportionate unsatisfactory projects ###
ggplot(top20, aes(x=reorder(country_name, pct_unsatisfactory), y=pct_unsatisfactory, label=pct_unsatisfactory)) +
geom_bar(stat='identity', aes(fill= continent), width=.5) +
scale_fill_manual(values = c("#E31480", "#2699D0","#6a6a6a", "#F69D30", "#4CA145")) +
labs( x = "Country", y = "Percentage of Projects Unsatisfactory (2000-2015)",
title ="Nauru, Botswana Have the Largest Proportion of Unsatisfactory Projects",
subtitle = "The 20 countries with the highest proportion of unsatisfactory projects are concentrated \n in Africa and New Zealand + Oceania",
fill = "Continent",
caption = "Source: Project Performance Database (Honig 2018)") +
th +
geom_text(aes(label=paste(round(pct_unsatisfactory*100,2),'%', '')), size =3, position=position_dodge(width=0.9), hjust= -0.04, family = "Montserrat") +
scale_y_continuous(labels = percent_format(), expand = c(.06, .06)) +
coord_flip()

To dig deeper into the geographic distribution of project performance, we examine the countries that have the highest proportion of unsatisfactory projects. Two key findings jump out: first, all projects in Nauru and Botswana captured in the databse since 2000 are unsatisfactory, though these results must be interpreted with caution given the small number of projects (n = 1 and n = 5 respectively). Second, even though all regions of Africa had less than 30% unsuccessful projects overall, we see several African countries on the top 20 list. This begs further exploration into the determinants of project performance in these countries.
Plot 3: How do project performance trends over time in Africa compare to other continents in the most funded sectors?
## Identify top 9 most highly funded sectors in Africa since 2000 ##
top_sectors <- data %>%
filter(completion_year > 2000 & africa_dummy == "Africa") %>%
group_by(sector_agg_name) %>%
summarise(total_fund = sum(project_cost, na.rm = TRUE)) %>%
arrange(desc(total_fund))
africa_top9 <- data %>%
filter(completion_year > 2000) %>%
select(completion_year, six_overall_rating, sector_agg_name, africa_dummy) %>%
filter(sector_agg_name %in% top_sectors$sector_agg_name[1:9]) %>%
group_by(sector_agg_name, africa_dummy, completion_year) %>%
summarize(
avg_performance = mean(six_overall_rating, na.rm = TRUE)
)
africa_top9$sector_agg_name <- factor(africa_top9$sector_agg_name, levels = top_sectors$sector_agg_name[1:9])
ggplot(africa_top9, aes(x = completion_year, y = avg_performance, color = africa_dummy)) +
scale_color_manual(values = c("#E31480", "#2699D0")) +
coord_cartesian(ylim = c(3, 6)) +
geom_smooth(method = "lm") +
facet_wrap(~sector_agg_name, ncol = 3) +
scale_x_continuous(name = "Year", limits = c(2000,2013)) +
labs(x = "Project Completion Year", y = "Average Performance Ranking (6 = Highly Satisfactory, 1 = Highly Unsatisfactory)",
color = "Region",
title = "Africa Diverges from Other Continents in Education, Health, Rep. Health, Water & Sanitation Performance",
subtitle = "Across the nine most funded sectors (ordered row-wise by funding amount from 1 in top left to 9 in bottom right) in Africa since 2000,\n trends are disperate in sectors building human capital while parallel in sectors building economic capital",
caption = "Source: Project Performance Database (Honig 2018)") +
th

The plot above highlights an interesting split in performance between sectors that build human capital (health, education, sanitation, etc.) and sectors that build economic capital (governance, infrastructure, energy, etc.). The performance trends in Africa are fairly parallel with other continents in the most funded economic capital sectors, but diverge in the most funded human capital sectors: health, education, reproductive health, and water and sanitation. We also see that the direction of the divergence varies across sectors: Africa improves more than other continents in education and water and sanitation, while other continents out-improve Africa in health and reproductive health. This plot also highlights the strong negative trend for both Africa and other continents in action related to debt.
Plot 4: Do leader and donor development priorities align in Ghana?
# reshape data for ghana and rank SDGs by total funding
data_sdg_ghana <- data_sdg %>%
filter(country_name == "Ghana" & completion_year > 2005) %>%
select(aiddata_id, goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17, six_overall_rating) %>%
gather(key = "goal", value = "funding", goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17) %>%
filter(funding > 0) %>%
group_by(goal) %>%
summarise(
funding = sum(funding, na.rm = TRUE),
performance = mean(six_overall_rating, na.rm = TRUE)
) %>%
mutate(rank = rank(-funding, ties.method ="random")
)
# rename goal numbers to goal names
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_1"] <- "No poverty"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_2"] <- "Zero hunger"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_3"] <- "Good health"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_4"] <- "Quality education"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_5"] <- "Gender equality"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_6"] <- "Clean water/sanitation"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_7"] <- "Affordable/clean energy"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_8"] <- "Economic growth"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_9"] <- "Industry/infra."
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_10"] <- "Reduced inequalities"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_11"] <- "Sustainable cities"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_12"] <- "Responsible consumption"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_13"] <- "Climate Action"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_14"] <- "Life below water"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_15"] <- "Life on land"
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_16"] <- "Peace/justice & strong inst."
data_sdg_ghana$goal[data_sdg_ghana$goal == "goal_17"] <- "Partnerships for the goals"
# merge in Listening to Leaders survey data
ltl_ghana <- ltl %>% filter(CountryID == "Ghana") %>%
mutate(rank = rank(-p, ties.method = "random"))
data_sdg_ghana <- merge(x=data_sdg_ghana, y=ltl_ghana,by.x="goal", by.y="q8_response", all.x = TRUE, all.y = TRUE)
data_sdg_ghana$rank.x[is.na(data_sdg_ghana$rank.x)] <- 17
data_sdg_ghana$rank.y[is.na(data_sdg_ghana$rank.y)] <- 17
data_sdg_ghana$discrete_performance = cut(data_sdg_ghana$performance, breaks= c(3, 3.5, 4, 4.5, 5, 5.5, 6))
ggplot(data_sdg_ghana, aes(x= rank.x, y = rank.y, fill = discrete_performance)) +
geom_point(shape = 21, size = 4) +
geom_text(label= data_sdg_ghana$goal,nudge_y = 0.45, check_overlap = T, vjust="inward",hjust="inward", family = "Montserrat") +
scale_fill_manual( values = rev(c("#125169", "#2699D0", "#a9d9ef","#F89E37", "#b83d05")), na.value="#424242",
labels = c("(3.0-3.5]", "(3.5-4.0]", "(4.0-4.5]", "(4.5-5.0]", "NA")) +
scale_y_reverse(name = "Leader Priority", breaks = seq(1, 17, 1)) +
scale_x_reverse(name = "Donor Priority", breaks = seq(1, 17, 1)) +
labs(y = "Leader Priority", x = "Donor Priority", fill = "Average Performance", size = "Total Spending",
title = "Ghanaian Leaders and Donors Diverge in Development Priorities",
subtitle = "Ghanian Leaders Prioritize Economic Growth, While Donors Prefer Funding Health Programs",
caption = "Source: Project Performance Database (Honig 2018)") +
geom_abline(intercept = 0, slope = 1, color = "#4CA145") +
#annotate("text", label = "Sources: Project Performance \nDatabase (Honig 2018), \nListening to Leaders \n(Custer et al 2018)", x = 2.5, y = 15, size = 3) +
annotate("text", label = "Higher Donor Priority >>", x = 4, y = 17, size = 4, color = "#4CA145", fontface =2, family = "Montserrat") +
annotate("text", label = "Higher Leader Priority >>", x = 17, y = 4, size = 4, color = "#4CA145", angle = 90, fontface=2, family = "Montserrat") +
th

Ghanaian political and non-governmental development leaders diverge considerably from donors in their how they prioritize the 17 Sustainable Development Goals (measured through survey responses for leaders and by relative funding amounts for donors). The largest divergences can be seen in economic growth (which leaders ranked 1 and donors ranked 6) and good health (which leaders ranked 7 and donors ranked 1). We also see that the goals with the worst performance all more highly prioritized by donors than leaders (falling below the line which represents the axis of equal donor and leader prioritization). This illuminates a possible correlation between diverging prioritizatin and project performance that merits further exploration.
Plot 5: How does funding flow from donors to development priorities?
data_sdg_Ghana <- data_sdg %>%
filter(country_name == "Ghana" & completion_year > 2000) %>%
select(aiddata_id, goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17, six_overall_rating, performance_cat, satisfactory, donor) %>%
gather(key = "goal", value = "funding", goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17) %>%
filter(funding > 0 & !is.na(satisfactory))
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_1"] <- "No poverty"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_2"] <- "Zero hunger"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_3"] <- "Good health"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_4"] <- "Quality education"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_5"] <- "Gender equality"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_6"] <- "Clean water/sanitation"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_7"] <- "Affordable/clean energy"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_8"] <- "Economic growth"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_9"] <- "Industry/infra."
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_10"] <- "Reduced inequalities"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_11"] <- "Sustainable cities"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_12"] <- "Responsible consumption"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_13"] <- "Climate Action"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_14"] <- "Life below water"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_15"] <- "Life on land"
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_16"] <- "Peace/justice & strong inst."
data_sdg_Ghana$goal[data_sdg_Ghana$goal == "goal_17"] <- "Partnerships for the goals"
ltl_Ghana <- ltl %>% filter(CountryID == "Ghana") %>%
mutate(rank = rank(-p, ties.method = "random"))
data_sdg_Ghana <- merge(x=data_sdg_Ghana, y=ltl_Ghana,by.x="goal", by.y="q8_response", all.x = TRUE, all.y = TRUE)
data_sdg_Ghana$rank[is.na(data_sdg_Ghana$rank)] <- 17
data_sdg_Ghana$funding[is.na(data_sdg_Ghana$funding)] <- 0
ggplot(data_sdg_Ghana, aes(y = funding, axis1 = donor, axis2 = reorder(goal, rank))) +
geom_alluvium(aes(fill = as.factor(satisfactory))) +
scale_fill_manual(values= c("#F69D30", "#2699D0")) +
geom_stratum() +
geom_label(stat = "stratum", label.strata = TRUE, family = "Montserrat") +
scale_y_continuous(labels = c("$0", "$2 bil", "$4 bil", "$6 bil")) +
scale_x_discrete(limits = c("Donor", "SDG"), expand = c(.1, .05)) +
scale_linetype_manual(values = c("blank", "solid")) +
labs(y = "Funding", fill = "Satisfactory",
title = "The World Bank is the Dominant Funder in Ghana, Focusing on Health and Strong Institutions",
subtitle = "Ghana Satisfactory and Unsatisfactory Development Projects by Donor, SDG, and Leader Rank",
caption = "Sources: Project Performance Database (Honig 2018), Listening to Leaders (Custer et al 2018)") +
th

This chart illuminates that the World Bank is not only far and away the largest donor to Ghana since 2000, but also tends to fund fewer, higher cost projects in its most funded Sustainable Development Goals of good health and peace, justice, and strong institutions. However, a result of this is that a single large unsatisfactory World Bank health project dramatically changes the performance composition of the entire sector in Ghana. We also observe considerable specialization across donors, with DFID emerging as the dominant funder of quality education and sole funder of gender equality, and the World Bank dominating the good health goal and serving as the sole funder of affordable/clean energy.
Plot 6: Do score distributions vary by project cost and evaluation type?
data%>%
filter(!is.na(data$performance_cat) & external_evaluator %in% c("internal", "external", "independent eval office") & project_cost > 0 & project_cost < 500000000) %>%
mutate(performane_cat = as.factor(performance_cat)) %>%
mutate(external_evaluator = fct_recode(external_evaluator, "By External Evaluator" = "external", "By Independent Eval Office" = "independent eval office", "By Internal Evaluator" = "internal")) %>%
ggplot(aes(x=performance_cat, y=project_cost, fill = fct_rev(performance_cat))) +
geom_flat_violin(position = position_nudge(x = .2, y = 0), alpha = .8) +
geom_point(aes(y = project_cost, color = fct_rev(performance_cat)),
position = position_jitter(width = .15), size = .5, alpha = 0.8) +
geom_boxplot(width = .1, outlier.shape = NA, alpha = 0.5) +
#expand_limits(x = 5.25) +
guides(fill = FALSE) +
guides(color = FALSE) +
scale_y_continuous(labels = comma, breaks = seq(0, 500000000, 100000000), expand = c(0,0)) +
scale_x_discrete(labels = c("highly\nunsatisfactory", "marginally\nunsatisfactory", "unsatisfactory",
"satisfactory", "marginally\nsatisfactory", "highly\nsastisfactory")) +
coord_flip() +
#scale_x_continuous(expand = c(0,0)) +
th +
theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
scale_fill_manual(values = c("#125169", "#2699D0", "#a9d9ef","#fabe7a", "#F89E37", "#b83d05"), na.value = "#424242") +
scale_color_manual(values = c("#125169", "#2699D0", "#a9d9ef","#fabe7a", "#F89E37", "#b83d05"), na.value = "#424242") +
facet_wrap(~external_evaluator, ncol = 3) +
labs(x = "Project Performance Category", y = "Project Cost", fill = "Project Performance \nCategory",
title = "Highest Cost Projects Slightly More Likely to Receive Top Ranking",
subtitle = "The highly satisfactory ranking has a higher density of more costly projects, perhaps signaling greater\nmanagement quality for higher budget programs",
caption = "Sources: Project Performance Database (Honig 2018)") +
th

Does a larger project budget translate to better management and higher performance? Or are large-scale projects unweildy and difficult to manage? The graph above provides weak evidence that the group of projects that receive the highest performance ranking have a larger share of high-cost programs. However, we see by the overlapping box-plots across categories for all three evaluation types that this difference is likely insignificant. We also see that the most common evaluation type is by an independent evaluation office, which is driven by the large number World Bank and the Asian Development Bank projects that are evaluated by this method.
Fig 7: How does the World Bank allocate its funding across continents and SDGs?
data_sdg_gather <- data_sdg %>%
select(aiddata_id, goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17, continent, satisfactory, donor, completion_year) %>%
gather(key = "goal", value = "funding", goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13, goal_14, goal_15, goal_16, goal_17) %>%
filter(funding > 0 & !is.na(satisfactory) & donor == "WB" & completion_year >= 2000)
data_sdg_gather$goal[data_sdg_gather$goal == "goal_1"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_2"] <- "Zero hunger"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_3"] <- "Good health"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_4"] <- "Quality education"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_5"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_6"] <- "Clean water/sanitation"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_7"] <- "Affordable/clean energy"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_8"] <- "Economic growth"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_9"] <- "Industry/infra."
data_sdg_gather$goal[data_sdg_gather$goal == "goal_10"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_11"] <- "Sustainable cities"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_12"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_13"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_14"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_15"] <- "Other"
data_sdg_gather$goal[data_sdg_gather$goal == "goal_16"] <- "Peace/justice & strong inst."
data_sdg_gather$goal[data_sdg_gather$goal == "goal_17"] <- "Other"
data_sdg_gather %>%
group_by(continent, goal) %>%
summarise(
funding = sum(funding),
prop_satisfactory = mean(satisfactory)) %>%
mutate(prop_satisfactory_factor = cut(prop_satisfactory, breaks = c(0, .5, .6, .7, .8, .9, 1))) %>%
filter(continent != "New Zealand + Oceania") %>%
ggplot(aes(area = funding, fill = prop_satisfactory_factor, label =goal,
subgroup = continent)) +
geom_treemap(color = "white", size = 3 , alpha = 1) +
geom_treemap_text(colour = "white", place = "center", reflow = T, family= "Montserrat", fontface = "bold") +
geom_treemap_subgroup_border(color = "#125169", size = 5) +
geom_treemap_subgroup_text(place = "topleft", colour =
"white", fontface = "italic", family = "Montserrat") +
scale_fill_manual(values = rev(c("#125169", "#2699D0", "#a9d9ef","#F89E37", "#b83d05"))) + th +
labs(fill = "Proportion Satisfactory \nProjects", area = "Total Funding",
title = "World Bank Projects Perform Worse in Africa Across Nearly All Sectors ",
subtitle = "Sustainable Cities and Industry and Infrastructure are two of the World Bank's top-funded sectors\nand also best performing across continents (area = total funding)",
caption = "Sources: Project Performance Database (Honig 2018)"
)

The plot above shows the distribution of World Bank funding since 2000 by continent and Sustainable Development Goal. We clearly see that approximately half of World Bank funding has gone to Asia, where the Bank enjoys strong project performance across sectors. Africa is a different story- where at least 30% of projects are unsatisfactory across all goals except for Sustainable Cities, Clean Water and Sanitation, and Industry and Infrastructure. We also see that Health is an outlier in North America, with at least 30% of World Bank projects receiving unsatisfactory rankings.
Fig 8: Top Funded SDG by Country
data_sdg_country <- data_sdg%>%
select(aiddata_id, goal_1, goal_2, goal_3, goal_4, goal_5,
goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13,
goal_14, goal_15, goal_16, goal_17, continent, satisfactory, six_overall_rating, performance_cat, country_code, country_name, donor, completion_year) %>%
gather(key = "goal", value = "funding", goal_1, goal_2, goal_3, goal_4, goal_5, goal_6, goal_7, goal_8, goal_9, goal_10, goal_11, goal_12, goal_13, goal_14, goal_15, goal_16, goal_17) %>%
group_by(country_name) %>%
filter(funding > 0 & completion_year >= 2000) %>%
filter(funding == max(funding))
g <- data_sdg_country %>% group_by(goal) %>% summarise(n = n())
g <- g[order(-g$n),]
top_5 <- g$goal[1:5]
data_sdg_country <- data_sdg_country %>%
mutate(goal = replace(goal, !(goal %in% top_5), "Other")) %>%
mutate(goal = replace(goal, goal == "goal_11", "Sustainable cities")) %>%
mutate(goal = replace(goal, goal == "goal_16", "Peace/justice & strong inst.")) %>%
mutate(goal = replace(goal, goal == "goal_7", "Affordable/clean energy")) %>%
mutate(goal = replace(goal, goal == "goal_3", "Good health")) %>%
mutate(goal = replace(goal, goal == "goal_4", "Quality education"))
world_shp <- st_read(here("data/ne_50m_admin_0_countries_lakes", "ne_50m_admin_0_countries_lakes.shp"), stringsAsFactors = FALSE, quiet = TRUE) %>%
select(country_name = NAME_LONG)
data_sdg_world <- left_join(world_shp, data_sdg_country) %>%
st_as_sf()
ggplot(data = data_sdg_world) +
geom_sf(aes(fill = goal), colour = "white") +
scale_fill_manual(values = c("#2699D0", "#F69D30", "#6a6a6a", "#4CA145", "#C42231", "#E31480"), na.value = "#d9d9d9") +
coord_sf(crs = 4326, datum = NA) +
map_th +
theme(legend.position = "bottom", legend.direction = "horizontal",
panel.background = element_rect(fill = "#ffffff")) +
labs(fill= "Goal Receiving\nMostFunding",
title = "Energy spending dominates in East Asia, focus on strong institutions in Central Africa",
subtitle = "The affordable/clean energy, good health, quality education, peace, justice, and strong institutions,\n and sustainable cities rank most frequently as the top-funded SDG by country",
caption = "Sources: Project Performance Database (Honig 2018), Natural Earth 4.1.0")

The above map shows that 5 of the 17 Sustainable Development Goals are the most-funded in the vast majority of countries. The map also illustrates clear regional trends in the most highly funded SDG by country. We see that the group of neighboring African countries Ethiopia, Sudan, Chad, and Niger receive the most funding for peace, justice, and strong institutions, likely explained by the history of conflict in that region. Interestingly, funding for affordable energy dominates Central and East Asia, perhaps signaling that such investments are particularly successful in this region.
Fig 9: World Bank and Chinese Investment in Ghana
#Approach adapted from: https://www.cultureofinsight.com/blog/2018/05/02/2018-04-08-multivariate-dot-density-maps-in-r-with-sf-ggplot2/
# Chinese and WB aid to Ghana from 2001-2014 from GeoQuery
gq_data <- read_csv(here("data", "geoquery_results.csv")) %>%
select(asdf_id, NAME_2, NAME_1, WB_spending = worldbank_geocodedresearchrelease_level1_v1_4_2.fa137b9.sum,
China_spending = chinaoda_geocodedresearchrelease_level1_v1_1_0.6810484.sum,
lights = viirs_vcmcfg_dnb_composites_v10_yearly_max.2015.mean
)
# Ghana ADM2 Shapefile from GADM
ghana2 <- st_read(here("data/gadm36_GHA_shp", "gadm36_GHA_2.shp"), stringsAsFactors = FALSE, quiet = TRUE)
# merge the data
sf_data <- left_join(gq_data, ghana2, by = "NAME_2") %>%
st_as_sf()
random_round <- function(x) {
v=as.integer(x)
r=x-v
test=runif(length(r), 0.0, 1.0)
add=rep(as.integer(0),length(r))
add[r>test] <- as.integer(1)
value=v+add
ifelse(is.na(value) | value<0,0,value)
return(value)
}
# data frame of number of dots to plot for each donor and district, (1 for every $1,000,000)
num_dots <- as.data.frame(sf_data) %>%
select(WB_spending, China_spending) %>%
mutate_all(funs(. / 1000000)) %>%
mutate_all(random_round)
suppressMessages(sf_dots <- map_df(names(num_dots),
~ st_sample(sf_data, size = num_dots[,.x], type = "random") %>%
st_cast("POINT") %>%
st_coordinates() %>%
as_tibble() %>%
setNames(c("lon","lat")) %>%
mutate(Donor = .x) %>%
mutate(Donor = fct_recode(Donor, "World Bank" = "WB_spending", "China" = "China_spending"))
) %>%
slice(sample(1:n()))) # once map_df binds rows randomise order to avoid bias in plotting order
ggplot() +
geom_sf(data = sf_data, fill = "transparent",colour = "white") +
geom_point(data = sf_dots, aes(lon, lat, colour = Donor), size = 1) +
annotate(geom = "point", x = -0.2, y = 5.55,
color = "#E31480", size = 7) +
annotate(geom = "point", x = -2.235833, y = 8.278333,
color = "#E31480", size = 7) +
annotate(geom = "label", x = -0.2, y = 5.46, label = "Accra",
fontface = "bold", color = "#E31480", size = 4, family = "Montserrat") +
annotate(geom = "label", x = -2.235833, y = 8.18, label = "Bui Dam",
fontface = "bold", color = "#E31480", size = 4, family = "Montserrat") +
scale_colour_manual(values = c("#2699D0", "#4CA145")) +
coord_sf(crs = 4326, datum = NA) +
map_th +
labs(x = NULL, y = NULL,
title = "Chinese investment in Ghana led by construction of Bui Dam, mining interests",
subtitle = "Chinese funding of the construction of the Bui Dam as well as mining interests in the North\n concentrate Chinese investment while WB funding spread more evenly throughout the country\n(Districts of Ghana, one dot = $1,000,000)",
caption = "Sources: Chinese Official Finance v1.1.1 (AidData, 2018), World Bank Geocoded Aid Data\n(AidData, 2017), Goodman, S., BenYishay, A., Lv, Z., & Runfola, D. (2019), GADM (2018)") +
guides(colour = guide_legend(override.aes = list(size = 18)))

This map illustrates several interesting spatial patterns of World Bank and Chinese funding in Ghana. First, we see a clear concentration of Chinese funding in the district containing the Bui Dam. This hydroelectric energy project funded in large part by the two credits from China Exim Bank totalling over $550 million. We also see that there is a much greater concentration of Chinese investment than World Bank in northern Ghana, likely driven by China’s investments in mining in that region of the country. While both China and the World Bank see a concentration of funding in major cities, namely the capital of Accra, World Bank funding is far more evenly distributed throughout Ghana than Chinese funding.